package com.mgface.jersey.filters;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;

/**
 * 在A域名下使用Ajax向B域名下的页面请求数据，会遇到跨域问题。
 * 另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功拿到数据。
 * <br/>
 * <b>跨域</b>
 * 怎样才能算跨域？协议，域名，端口都必须相同，才算在同一个域。
 * 
 * Access-Control-Allow-Origin只有当目标页面的response中,包含了 Access-Control-Allow-Origin这个header,
 * 并且它的值里有我们自己的域名时，浏览器才允许我们拿到它页面的数据进行下一步处理。如：
 * Access-Control-Allow-Origin: http://run.jsbin.io
 * 如果它的值设为 * ，则表示谁都可以用：
 * Access-Control-Allow-Origin: *  在生产环境中，没人会用 *
 * @author yuxiang
 *
 */
@Provider
public class CORSResponseFilter implements ContainerResponseFilter{

	@Override
	public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
			throws IOException {
		MultivaluedMap<String, Object> headers = responseContext.getHeaders();
		headers.add("Access-Control-Allow-Origin", "*"); //指定允许其他域名访问
		//headers.add("Access-Control-Allow-Origin", "http://podcastpedia.org"); //allows CORS requests only coming from podcastpedia.org		 
		headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");//响应类型			 
		headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia"); //响应头设置
		headers.add("Keep-Alive", 10);//这个keep-alive怎么在服务器控制保持连接时间？
		System.out.println(headers.size());
		headers.forEach((k,v)->{
			System.out.println(k+"->"+v);
		});

	}

}
